<?php
namespace Home\Aip;
use Lib\PasswordHash;
use Think\Controller;

class Alipayon extends Controller{
		protected $tb_pay = 'payment' ;//支付方式表
		 /**
		 * 引入支付宝
		 *在类初始化方法中，引入相关类库
		*/  
       public function _initialize() {
			vendor('Alipay.Corefunction');
			vendor('Alipay.Md5function');
			vendor('Alipay.Notify');
			vendor('Alipay.Submit');    
       }
	   
		/*该方法其实就是将接口文件包下alipayapi.php的内容复制过来
        *  然后进行相关处理
        */	   
	   public function doalipay($paymoney, $order_list) {
 
			/* *
			 * 功能：即时到账交易接口接入页
			 * 版本：3.4
			 * 修改日期：2016-03*08
			 * 说明：
			 *
			/**************************请求参数**************************/
					//商户订单号，商户网站订单系统中唯一订单号，必填
					$out_trade_no = $order_list['pay_sn'];//$_POST['WIDout_trade_no']

					//订单名称，必填
					$subject = "支付订单号：".$order_list['order_sn'];//$_POST['WIDsubject']

					//付款金额，必填
					$total_fee = $paymoney;//$_POST['WIDtotal_fee']

					//商品描述，可空
					$body = "支付订单号：".$order_list['order_sn'];//$_POST['WIDbody']

			/************************************************************/
			//dump(C('alipay_config.service'));die;
			//支付宝账号
			unset($str);
			unset($arr);
			$str = "payment_code='%s'";
			$arr = array('alipay');					
			//查询
			$pay = _getOne($this->tb_pay,$str,$arr);
			$paycode = unserialize($pay['payment_config']) ;			
			//构造要请求的参数数组，无需改动
			$parameter = array(
					"service"       => C('alipay_config.service'),
					"partner"       => $paycode['alipay_partner'],//合作身份者ID，签约账号
					"seller_id"     => $paycode['alipay_partner'],
					"payment_type"	=> C('alipay_config.payment_type'),
					"notify_url"	=> C('alipay_config.notify_url'),
					"return_url"	=> C('alipay_config.return_url'),
					
					"anti_phishing_key"=>C('alipay_config.anti_phishing_key'),
					"exter_invoke_ip"=> get_client_ip(),//客户端的IP地址
					"out_trade_no"	=> $out_trade_no,
					"subject"	=> $subject,
					"total_fee"	=> $total_fee,
					"body"	=> $body,
					"_input_charset"	=> trim(strtolower(C('alipay_config.input_charset'))),					
			);
			
			$alipay_config['partner']		= $paycode['alipay_partner'];
			$alipay_config['seller_id']	= $alipay_config['partner'];
			$alipay_config['key']			= $paycode['alipay_account'];
			$alipay_config['notify_url'] = C('alipay_config.notify_url');
			$alipay_config['return_url'] =  C('alipay_config.return_url');
			$alipay_config['sign_type']  = C('alipay_config.sign_type');
			$alipay_config['input_charset']= C('alipay_config.input_charset');
			$alipay_config['cacert']    = C('alipay_config.cacert');
			$alipay_config['transport']    = C('alipay_config.transport');
			$alipay_config['payment_type'] = C('alipay_config.payment_type');
			$alipay_config['service'] = C('alipay_config.service');
			$alipay_config['anti_phishing_key'] = C('alipay_config.anti_phishing_key');
			$alipay_config['exter_invoke_ip'] = get_client_ip();

			//建立请求
			$alipaySubmit =  new \AlipaySubmit($alipay_config);
			$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
			echo $html_text;		 
	   }
	   
	  /*
	  *服务器异步通知页面方法       
	  *其实这里就是将notify_url.php文件中的代码复制过来进行处理
	  *
	  */
	  public function notifyurl(){

		//计算得出通知验证结果
			$alipay_config['partner']		= $paycode['alipay_partner'];
			$alipay_config['seller_id']	= $alipay_config['partner'];
			$alipay_config['key']			= $paycode['alipay_account'];
			$alipay_config['notify_url'] = C('alipay_config.notify_url');
			$alipay_config['return_url'] =  C('alipay_config.return_url');
			$alipay_config['sign_type']  = C('alipay_config.sign_type');
			$alipay_config['input_charset']= C('alipay_config.input_charset');
			$alipay_config['cacert']    = C('alipay_config.cacert');
			$alipay_config['transport']    = C('alipay_config.transport');
			$alipay_config['payment_type'] = C('alipay_config.payment_type');
			$alipay_config['service'] = C('alipay_config.service');
			$alipay_config['anti_phishing_key'] = C('alipay_config.anti_phishing_key');
			$alipay_config['exter_invoke_ip'] = get_client_ip();
			
			$alipayNotify = new \AlipayNotify($alipay_config);
			$verify_result = $alipayNotify->verifyNotify();

			if($verify_result) {//验证成功
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//请在这里加上商户的业务逻辑程序代

				
				//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
				
				//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
				
				//商户订单号

				$out_trade_no = $_POST['out_trade_no'];

				//支付宝交易号

				$trade_no = $_POST['trade_no'];

				//交易状态
				$trade_status = $_POST['trade_status'];


				if($_POST['trade_status'] == 'TRADE_FINISHED') {
					//判断该笔订单是否在商户网站中已经做过处理
						//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
						//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
						//如果有做过处理，不执行商户的业务程序
							
					//注意：
					//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知

					//调试用，写文本函数记录程序运行情况是否正常
					//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
				}
				else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
					//判断该笔订单是否在商户网站中已经做过处理
						//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
						//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
						//如果有做过处理，不执行商户的业务程序
							
					//注意：
					//付款完成后，支付宝系统发送该交易状态通知

					//调试用，写文本函数记录程序运行情况是否正常
					//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
				}

				//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
					
				echo "success";		//请不要修改或删除
				
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			}
			else {
				//验证失败
				echo "fail";

				//调试用，写文本函数记录程序运行情况是否正常
				//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
			}		  
	  }

}
